package com.mh.common;

import com.mh.exception.MyTokenException;
import com.mh.utils.JWTUtils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;

/**
 * Date:2024/9/2
 * author:zmh
 * description: 自定义登录拦截器
 **/

@Slf4j
public class UserLoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 获取请求头，header值为Authorization，承载token
        String token = request.getHeader(JWTUtils.header);

        // 判断请求方式时是否是OPTIONS，如果是直接返回成功状态（预检请求不需要判断token）
        if(request.getMethod().equals("OPTIONS")){
            response.setStatus(HttpServletResponse.SC_OK);
            return true;
        }

        //token不存在
        if (token == null || token.equals("")) {
            // token为空
            throw new MyTokenException("请先登录");
        }

        //验证token
        String sub = JWTUtils.validateToken(token);
        if ("0".equals(sub)){
            // token
            throw new MyTokenException("登录状态异常，请重新登录！");
        }

        if ("1".equals(sub)){
            // Token验证失败
            throw new MyTokenException("请重新登录！");
        }

        //更新token有效时间 (如果需要更新其实就是产生一个新的token)
//        if (JWTUtils.isNeedUpdate(token)){
//            String newToken = JWTUtils.createToken(sub);
//            response.setHeader(JWTUtils.header,newToken);
//        }
        return true;
    }

}
